/*
    created: 2023/4/12
    filename: seqqueue.h
    author: 李东霖
    purpose: 循环顺序队列的定义 采用静态数组
    备注：这里牺牲一个存储单元来区分队满和队空
*/

#ifndef _SEQQUEUE_H_
#define _SEQQUEUE_H_

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 10
typedef int ElemType;

typedef struct SqQueue
{
    ElemType data[MAXSIZE];
    int front; //头指针
    int rear;  //尾指针
}SqQueue,*PSqQueue;

//初始化 失败返回NULL 成功返回一个SqQueue*
SqQueue* InitQueue1();  
//初始化    失败q=NULL 成功q=SqQueue*  返回值 -1-存在p 0-失败 1-成功
int InitQueue2(PSqQueue *q);
//销毁队列  
void DestroyQueue(PSqQueue *q);  
//清空队列  
void ClearQueue(PSqQueue q); 
//判断队列是否为空  返回值：-1-传入空指针 0-非空 1-空
int QueueEmpty(PSqQueue q); 
//入队 返回值：-1-传入空指针 0-失败 1-成功
int enQueue(PSqQueue q,ElemType *e); 
//出队 -1-传入空指针 0-失败 1-成功
int deQueue(PSqQueue q,ElemType *e); 
//判断队列是否满 返回值：-1-传入空指针 0-非空 1-空
int QueueFull(PSqQueue q);   
//得到队头 -1-传入空指针 0-失败 1-成功
int GetHeadQueue(PSqQueue q,ElemType *e);  
//得到队列的长度 -1-传入空指针 >=0 队列长度
int LengthQueue(PSqQueue q); 
//打印队列  
void DispQueue(PSqQueue q);
#endif //!_SEQQUEUE_H_